#pragma once
#ifndef CHATCLIENT_H
#define CHATCLIENT_H

#include <mutex>

//muduo头文件
#include <muduo/net/TcpClient.h>
#include <muduo/net/EventLoop.h>
#include <muduo/base/Logging.h>

//for nocopyable
#include <boost/noncopyable.hpp>

//using 引用
using namespace muduo;
using namespace muduo::net;

//聊天室客户端类
class ChatClient : boost::noncopyable{//类不可复制
public:
    //含参构造函数
    ChatClient(EventLoop* loop,
            const InetAddress& serverAddr,
            const string& name);
    
    //连接服务器
    void connect();

    //终止服务器
    void stop();

    //断开连接
    void disconnect();

private:
    //客户端对象
    TcpClient _client;

    //循环事件指针
    EventLoop* _loop;

    //连接到服务端的指针
    TcpConnectionPtr _connection;

    //锁，这里用来保护指针赋值
    std::mutex _conn_mutex;

public:
    //连接事件
    void onConnection(const TcpConnectionPtr&);

    /**
     * 客户端收到读写事件回调函数
     * @param conn: 服务端连接对象
     * @param buffer: 缓冲区
     * @param time: 接收到数据时的时间
     */
    void onMessage(const TcpConnectionPtr& conn,    //连接
                    Buffer* buffer,                 //缓冲区
                    Timestamp time);                //接收到数据时候的时间

};


#endif